package small.common.executeEngine.engine;

import small.common.core.exceptions.Closeable;
import small.common.executeEngine.processor.TaskProcessor;
import small.common.executeEngine.task.ExecuteTask;

import java.util.Collection;

public interface TaskExecuteEngine <T extends ExecuteTask> extends Closeable {


    /**
     * 添加任务
     * @param key
     * @param task
     */
    void addTask(Object key, T task);

    /**
     * 移除任务
     * @param key
     * @return
     */
    T removeTask(Object key);


    /**
     * 获取执行器
     * @param key
     * @return
     */
    TaskProcessor getProcessor(Object key);

    /**
     * 添加执行器
     * @param key
     * @param taskProcessor
     */
    void addProcessor(Object key, TaskProcessor taskProcessor);

    /**
     * 移除执行器
     * @param key
     */
    void removeProcessor(Object key);

    /**
     * 设置默认执行器
     * @param defaultTaskProcessor
     */
    void setDefaultTaskProcessor(TaskProcessor defaultTaskProcessor);


    /**
     * 获取所有任务key
     * @return
     */
    Collection<Object> getAllTaskKeys();
}
